package com.rustic.server.service;

import cn.xy.base.server.po.SysAdmin;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.rustic.server.po.RusticAdmin;
import com.rustic.server.query.RusticAdminAdminListQuery;
import com.rustic.server.vo.list.RusticAdminAdminListVO;

import java.util.List;
import java.util.Map;

/**
 * 表[rustic_admin]对应的服务类
 *
 * @author auto
 */

public interface RusticAdminService extends IService<RusticAdmin> {

    String RUSTIC_ADMIN_NOT_EXIST = "管理员乡村关联不存在";

    /**
     * 查询（根据ID 批量查询）
     *
     * @param idList id列表
     * @return 管理员乡村关联列表
     */
    List<RusticAdmin> listByIdIn(List<Integer> idList);

    /**
     * 查询（根据ID 批量查询）并转换成Map
     *
     * @param idList id列表
     * @return 管理员乡村关联列表
     */
    Map<Integer, RusticAdmin> mapByIdIn(List<Integer> idList);

    /**
     * 管理列表查询条件
     *
     * @param query 查询参数
     * @return 查询条件
     */
    LambdaQueryWrapper<RusticAdmin> toAdminListWrapper(RusticAdminAdminListQuery query);

    /**
     * toAdminListVo
     *
     * @param rusticAdminList rusticAdminList
     * @param sysAdminList sysAdminList
     * @return AdminListVO
     */
    List<RusticAdminAdminListVO> toAdminListVo(List<RusticAdmin> rusticAdminList, List<SysAdmin> sysAdminList);

    /**
     * 查询管理员和乡村管理的信息
     * @param query 查询参数
     * @return Page<RusticAdminAdminListVO>
     */
    Page<RusticAdminAdminListVO> getPageList(RusticAdminAdminListQuery query);

    /**
     * 根据管理员id查询管理员关联的乡村id和对应的角色id
     *
     * @param adminId 管理员id
     * @return 关联的乡村id，对应的角色id
     */
    Map<Integer, Integer> getRusticAndRoleByAdminId(int adminId);

    /**
     * 根据管理员id查询管理员关联的乡村id
     *
     * @param adminId 管理员id
     * @return 关联的乡村id列表
     */
    List<Integer> getRusticIdByAdminId(int adminId);

    /**
     * 根据管理员id和乡村id查询关联
     *
     * @param adminId  管理员id
     * @param rusticId 乡村id
     * @return RusticAdmin
     */
    RusticAdmin getByAdminIdAndRusticId(int adminId, int rusticId);

    /**
     * 批量保存管理员和乡村的角色关联
     *
     * @param adminId      管理员id
     * @param rusticIdList 乡村id列表
     * @param roleId       角色id
     */
    void saveLinkBatch(int adminId, List<Integer> rusticIdList, int roleId);

    /**
     * 更新管理员和乡村的角色关联
     *
     * @param adminId  管理员id
     * @param rusticId 乡村id
     * @param roleId   角色id
     */
    void updateLink(int adminId, int rusticId, int roleId);

    /**
     * 获取管理员在乡村管理员中权限最大的角色，即roleId最小的
     *
     * @param adminId 管理员id
     * @return int roleId
     */
    int getAdminRoleMax(int adminId);

    /**
     * 删除管理员和乡村的关联
     *
     * @param adminId      管理员id
     * @param rusticId     乡村id
     * @param operateAdminId 当前操作的管理员id
     */
    void deleteLink(int adminId, int rusticId, int operateAdminId);
}
